package ar.com.gals.service;

import java.util.List;

import ar.com.gals.domain.TipoEquivalencia;
import ar.com.gals.error.GalsException;
import ar.com.gals.repository.TipoEquivalenciaRepository;

public class TipoEquivalenciaService extends AbstractService<TipoEquivalencia> {

	
	public TipoEquivalenciaService() {
		this.domain = TipoEquivalencia.class;
	}

	
	@Override
	public List<TipoEquivalencia> getAll() throws GalsException {
		return this.getAllOrderBy("nombre");
	}
	
	
	public List<TipoEquivalencia> getAll(String nombre) throws GalsException {
		
		List<TipoEquivalencia> list = null;
		
		try
		{
			this.beginTransaction();
		
			list = new TipoEquivalenciaRepository(this.session).getAll(nombre);
			
			this.commit();
		}
		catch(Exception e) {
			
			this.rollback();
			
			throw new GalsException(e.getMessage());
		}
		
		return list; 
	}
	
	
	@Override
	protected void executeCreate(TipoEquivalencia tipoEquivalencia) throws GalsException {
		
		this.validarTipoEquivalenciaRepetida(tipoEquivalencia);
		
		super.executeCreate(tipoEquivalencia);
	}
	
	
	@Override
	protected void executeUpdate(TipoEquivalencia tipoEquivalencia) throws GalsException {
		
		this.validarTipoEquivalenciaRepetida(tipoEquivalencia);
		
		super.executeUpdate(tipoEquivalencia);
	}

	
	private void validarTipoEquivalenciaRepetida(TipoEquivalencia tipoEquivalencia) throws GalsException {
		
		TipoEquivalencia tipoEquivalenciaAux = new TipoEquivalenciaRepository(this.session).getByName(tipoEquivalencia.getNombre());
		
		if(tipoEquivalenciaAux != null && tipoEquivalenciaAux.getId() != tipoEquivalencia.getId())
			throw new GalsException("Ya existe un tipo de equivalencia con nombre " + tipoEquivalencia.getNombre());
	}
}
